import { defineStore } from "pinia"
import { addToCartApi} from "@/api/cart"
import useUserStore from "./user"

/**
 * 购物车管理的 store 
 */

const useCartStore = defineStore("cart",{
    state(){ //状态数组
        return{
            cart:[] as CartProduct[] //购物车数组，保存购物车中的商品数据
        }  
    },
    getters:{ //store 中计算的属性      
        //是否所有商品被选中
        allChecked(state){
            return state.cart.every(curr => curr.checked)
        }, 
        // 所有选中商品的合计金额
        totalMoney(state) {  
            return state.cart.reduce((sum,curr) =>{
                //当前遍历到的商品是被选中的，则累加到商品小计金额到合计中
                if(curr.checked){
                    sum += curr.price *(curr.amount as number)
                }
                return sum
            },0)*100
        },
        //购物车中商品总数量
        totaAmount(state){
            return state.cart.reduce((sum,curr)=> sum + (curr.amount as number),0)
        },
    },   
    actions:{ //更新状态数据的方法

        // 加如购物车 
      async  addToCart(prod: CartProduct){  
        const store = useUserStore()
        //加入购物车将当前购物车的商品信息与服务端进行同步
       const result = await  addToCartApi(store.userid,prod.id,prod.amount ?? 1 )
                
        
        //判断当前选购的商品在购物车数组红是否已存在
        //如果已存在，则仅叠加数量即可，如果不存在，则新添加到数组中保存
        const has = this.cart.find(curr => curr.id === prod.id)
        if (has) { // 有则叠加数量
          has.amount = (has.amount ?? 1) + (prod.amount ?? 1)
        } else { // 没有则将当前选购商品添加 到数组中保存
          this.cart.push({
            ...prod,
            amount: 1,
            checked: true,
          })
        }
      }, 
    /**
     *从购物车中移除商品 
     */
    removeFromCart(id:string){
        this.cart = this.cart.filter(curr => curr.id !==id)
    },

    /***
     * 修改所有购物车数据的选中状态
     */
    toggleAllChecked(status:boolean){
        this.cart.forEach(curr =>{
            curr.checked = status
        }) 
 
    }
    }, 
    persist:true, //持久化保存购物车数据
})     
    
export default  useCartStore